home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 8 / FM Towns Free Software Collection 8.iso / t_os / namegen / namegen.doc < prev    next >
Text File  |  1994-06-01  |  13KB  |  395 lines

  1. ==============================================================
  2. =  名前ジェネレータ namegen.exp  V1.00                     =
  3. =          1994.02.10                                        =
  4. =         制作:STUDIO MU   風の谷のガンダルフ =
  5. ==============================================================
  6.  
  7.  
  8.  
  9. §1  はじめに
  10.  
  11.  本プログラムは、テキストファイルからデータを読み込み、それらをランダム
  12. に組み合わせたものを表示するものです。たとえば,
  13.  
  14.     第一フィールドデータ:佐藤,鈴木
  15.     第二フィールドデータ:太郎,花子
  16.  
  17. とすると、
  18.  
  19.     名前:佐藤太郎、鈴木太郎、佐藤花子、鈴木花子
  20.  
  21. のどれかをランダムに出力します。適当なデータファイルを作成することにより、
  22. 人名などのランダム生成のほか、「いつ、だれが、どうした」型のナンセンス文
  23. を生成するといった冗談用途にも使えます(^_^;)。
  24.  
  25.  
  26.  
  27. §2  機能説明
  28.  
  29.     ・最終的に出力されるものを「名前」と呼びます。これは便宜上の呼び名で
  30.       あり、実際には文に相当するものも作れます。
  31.  
  32.     ・名前は1個以上のフィールドの並びであるとします。
  33.  
  34.     ・各フィールドはそれぞれ固有の生成確率で出現し、各々に属するワードの
  35.       一つがランダムに入ります。
  36.  
  37.     ・ワードおよび生成確率は、テキストファイルの形で与えます。以下これを
  38.       名前ファイルと呼びます。
  39.  
  40.  
  41.  【例1】日本の人名は
  42.  
  43.     第一フィールド(姓):100%出現
  44.     第一フィールド(名):100%出現
  45.  
  46. の形で表されます。ここでワードとして
  47.  
  48.     第一フィールド:佐藤、鈴木
  49.     第二フィールド:太郎、花子
  50.  
  51. を与えると、
  52.  
  53.     第一フィールド:確率50%で佐藤、それ以外なら鈴木
  54.     第二フィールド:確率50%で太郎、それ以外なら花子
  55.  
  56. となり、名前として
  57.  
  58.     佐藤太郎、鈴木太郎、佐藤花子、鈴木花子
  59.  
  60. がそれぞれ25%ずつの確率で出力されるわけです。
  61.  
  62.  
  63.  【例2】ナンセンス文を作成します。形式を
  64.  
  65.     「(いつ)だれが(だれと)どうした」
  66.  
  67. とします。この場合、4フィールドで形成されることになりますが、「いつ」お
  68. よび「だれと」のフィールドは省略可能と考えて、
  69.  
  70.     第一フィールド:生成確率 50% ワード:去年、昨日、今日
  71.     第二フィールド:生成確率100% ワード:お父さんが、先生が、ゴリラが
  72.     第三フィールド:生成確率 50% ワード:お母さんと、総理大臣と、猫と
  73.     第四フィールド:生成確率100% ワード:踊った、昼寝した、酒を飲んだ
  74.  
  75. とすれば、
  76.  
  77.     去年おとうさんが猫と酒を飲んだ
  78.     先生が踊った
  79.     ゴリラがお母さんと昼寝した
  80.     昨日ゴリラが酒を飲んだ
  81.  
  82. などの文が出力されます。
  83.  
  84.  
  85.  
  86. §3  実行方法
  87.  
  88.  実行プログラムはnamegen.expです。
  89.   TownsOSのコンソールまたはMS-DOSで、
  90.  
  91.     run386 -nocrt namegen [-n num -v level] namefile1 [namefile2 ...]
  92.  
  93. のように入力してください。
  94.   引数には名前ファイル(書式は§4参照)名を指定します。2個以上指定した
  95. 場合は、それらを連結したものを読み込んだ場合と同じ動作をします。
  96.  オプションは次のものが指定できます。
  97.     ・-n num
  98.       num には生成する名前の数(1 以上)を指定します。省略時には1 になり
  99.       ます
  100.     ・-v level
  101.       level には冗長レベルを指定します。これは名前ファイル読み込み中にど
  102.       の程度まで動作経過を出力するかで、以下のどれかが指定できます。
  103.              0 : 経過表示なし
  104.              1 : 読み込みファイル名を表示
  105.              2 : 読み込みファイル名・制御コマンドを表示
  106.       デフォルトでは0 になっており、画面には名前だけを出力します。名前フ
  107.       ァイル中のミスの場所を特定する場合などに1,2 を使用してください。な
  108.       お、経過表示はstderrに出力されるので、namegen の出力をファイルにリ
  109.       ダイレクトしたときは、名前だけがファイルに書き込まれます。
  110.   また、オプション指定に誤りがある場合や読み込みファイルを指定しなかった
  111. 場合は、ヘルプメッセージが出力されます。
  112.   正常に動作した場合は名前ファイルを読み込み、指定個数分の名前を出力して
  113. 終了します。
  114.  
  115.  その他の注意事項をいくつか挙げます。
  116.  
  117.     ・Cの標準ライブラリしか使っていないので、run386.exeがあれば、T-B
  118.       IOSを組み込んでいないMS-DOSでも動作します。
  119.  
  120.     ・run386.exe にパスが通っていないときやnamegen.expがカレントディレク
  121.       トリにいないときは、適当にパス指定を行ってください。また、-nocrtは
  122.       実行終了後に画面をクリアしないためのrun386.exeに対するオプションで
  123.       あり、出力をリダイレクトする場合は不要です。
  124.  
  125.     ・あまりないと思いますが、どうしてもTownsMENUから動かしたい
  126.       場合は、必要なパラメータを与えたうえでファイルにリダイレクトするバ
  127.       ッチを作ってください。
  128.  
  129.  
  130.  
  131. §4  名前ファイル書式
  132.  
  133.   名前ファイルは以下の形式で記述します。なお、すべての位置において、空行
  134. および'#' で始まる行(コメント行)は無視されます。また、一行は(半角で)
  135. 最大250 文字までです。
  136.   namegen のパラメータとして複数のファイルを与える場合は、それらを指定順
  137. に連結した場合にこの形式になるようにしてください。
  138.  
  139.     フィールド数
  140.     各フィールドの生成確率
  141.     制御コマンド
  142.         :
  143.         :
  144.     制御コマンド
  145.  
  146.   フィールド数には1 ~255 の整数を一つ書きます。
  147.   生成確率は単位を%として0 ~100 の整数を指定します。これを、スペースま
  148. たは改行で区切って、フィールド数個分並べます。
  149.   上記の2つは必須ですが、この後には任意個の制御コマンドを書くことができ
  150. ます。制御コマンドは行頭の「'\'+英字一文字」により開始され、以後、次の制
  151. 御コマンドまでの行がパラメータとして解釈されます。
  152.  
  153.  
  154. §4.1  \f:フィールド宣言
  155.  
  156.   後続のワード宣言で指定するワードの所属フィールド番号を指定します。
  157.   スペースまたは改行を区切りとして、1~フィールド数までの整数を任意個並
  158. べることができます。
  159.  
  160.  
  161. §4.2  \w:ワード宣言
  162.  
  163.   ワードを登録します。所属フィールドは、最新のフィールド宣言で指定された
  164. ものになります。
  165.   ワードは任意長の任意文字列を、改行を区切りとして書き並べます。ただし、
  166. '\' で始まる文字列は、次の制御コマンドとみなされるためワードとして使用で
  167. きません。
  168.  
  169.  
  170. §4.3  \i:ファイル・インサート
  171.  
  172.   別の名前ファイルをその位置に挿入します。つまりこのコマンドの位置に、指
  173. 定ファイルの内容を展開したのと同じ効果を生みます。
  174.   制御コマンドの次行に、挿入するファイル名を記述します。このコマンドの場
  175. 合のみ、パラメータは一行しか書けません。同じ位置に続けて複数のファイルを
  176. 挿入する時は、ファイル毎に\iコマンドを並べて下さい。
  177.   また、挿入ファイルの中でさらに\iコマンドを使用することも可能です。ただ
  178. し、挿入の入れ子は8階層までです。
  179.  
  180. §4.4 記述例
  181.  
  182.   名前ファイルの記述例をいくつか挙げます。
  183.   なお、「←」より右の部分は説明のため付加したもので、実際の名前ファイル
  184. ではパラメータの後にコメントは書けません。
  185.  
  186.  [例1]§2の例1
  187.  
  188.     #日本の人名     ← 行頭に'#'を置けばコメントになります
  189.                     ← 空行は無視されます
  190.     #フィールド数
  191.     2
  192.     #生成確率
  193.     100 100
  194.     #名字
  195.     \f
  196.     1
  197.     \w
  198.     佐藤
  199.     鈴木
  200.     #名前
  201.     \f
  202.     2
  203.     \w
  204.     太郎
  205.     花子
  206.  
  207.  [例2]§2の例2
  208.  
  209.     #ナンセンス文
  210.     #フィールド数
  211.     4
  212.     #生成確率
  213.      50  100        ←任意個のスペースで区切る他、適当に改行できます
  214.     100   50
  215.     #いつ
  216.     \f
  217.     1
  218.     \w
  219.     去年
  220.     昨日
  221.     今日
  222.     #だれが
  223.     \f
  224.     2
  225.     \w
  226.     お父さんが
  227.     先生が
  228.     ゴリラが
  229.     #だれと
  230.     \f
  231.     3
  232.     \w
  233.     お母さんと
  234.     総理大臣と
  235.     猫と
  236.     #どうした
  237.     \f
  238.     4
  239.     \w
  240.     踊った
  241.     昼寝した
  242.     酒を飲んだ
  243.  
  244.  [例3]より実用的な人名ジェネレータ
  245.  
  246.     #フィールド数                                   jpn_last.namの中身
  247.     2                                               \w
  248.     #生成確率                                       鈴木
  249.     100 100                                          :
  250.     #名字                                           jpn_1stm.namの中身
  251.     \f                                              \w
  252.     1                                               太郎
  253.     \i                                               :
  254.     jpn_last.nam    ←名字ファイルを挿入            jpn_1stb.namの中身
  255.     \f                                              \w
  256.     2                                               浩美
  257.     \i              ←名前ファイルを挿入             :
  258.     jpn_1stm.nam    ←男性名                        jpn_l_m.namの中身
  259.     jpn_1stb.nam    ←男女両用の名前                \w
  260.     \f                                              嵐
  261.     1 2             ←両フィールドに所属             :
  262.     \i
  263.     jpn_l_m.nam     ←名字・名前両用
  264.  
  265.  
  266.  
  267. §5  エラーメッセージ
  268.  
  269.   エラーが生じると、namegen はメッセージとエラー行(名前ファイルに関する
  270. エラーのとき)を表示して終了します。以下、各エラーを説明します。
  271.  
  272.     ・Cannot open namefile.
  273.       名前ファイルをオープンできません。
  274.       引数または\iコマンドで指定したファイル名およびパスをチェックしてく
  275.       ださい。
  276.  
  277.     ・Out of memory.
  278.       メモリが足りません。
  279.       namegen は名前ファイルを読みながら、必要に応じてメモリを確保してい
  280.       きます。途中でネイティブメモリが足りなくなれば、その段階でこのエラ
  281.       ーを出して終了します(普通の環境ではまず起こらないと思いますが)。
  282.  
  283.     ・Illegal number of fields.
  284.       フィールド数が許される範囲を超えています。
  285.       現バージョンで許されるフィールド数は1 ~255 の範囲です。
  286.  
  287.     ・Value of probability is out of range.
  288.       生成確率が許される範囲を超えています。
  289.       現バージョンで許される生成確率(%)は0 ~100 の範囲です。
  290.  
  291.     ・Field generation probability is undefined.
  292.       生成確率が未定義のフィールドがあります。
  293.       生成確率の個数がフィールド数と一致しているか確認してください。
  294.  
  295.     ・Illegal control command.
  296.  
  297.       無効な制御コマンドがあります。'\' の後にf,w,i 以外が来ていないか、
  298.       また、コマンドを抜かしてパラメータを書いていないかチェックしてくだ
  299.       さい。
  300.  
  301.     ・Field number is out of range.
  302.       フィールド番号が範囲外です。
  303.       \fコマンドのパラメータに指定できるのは、1 以上、フィールド数以下の
  304.       整数です。
  305.  
  306.     ・No word is defined in the generatable field.
  307.       生成確率が0 より大で、属するワードが存在しないフィールドがあります。
  308.       生成確率が0 でないフィールドは、必ず1 個以上のワードを指定する必要
  309.       があります。
  310.  
  311.     ・Nesting of file is too deep.
  312.       名前ファイル挿入のネストが深すぎます。
  313.       \iコマンドによるファイルの入れ子構造は、8階層までです。
  314.  
  315.     ・Filename is missing in insertion.
  316.       \iコマンドで挿入ファイル名が抜けています
  317.  
  318.  
  319.  
  320. §6  プログラムについて
  321.  
  322.   プログラムの作成にはGCCを使用しました。
  323.   一応src ディレクトリの下にソースを入れてあります。挿入ネストの深さやフ
  324. ィールド数の制限を変えたい場合は、namegen.h を修正してmakeしてください。
  325.  また、プログラム自体はANSI規格の標準ライブラリしか使っていませんの
  326. で、他のコンピュータでもほとんど再コンパイルだけで移植できるはずです(int
  327. が32ビットなら(^_^;))。
  328.  
  329.  
  330.  
  331. §7 更新履歴
  332.  
  333.  1993.08.30    V0.10   試作バージョン
  334.   1994.02.10    V1.00   名前ファイルフォーマットの変更、挿入機能追加
  335.  
  336.  
  337.  
  338. §8  添付した名前ファイル
  339.  
  340.  今回は以下のファイルを添付してあります。
  341.     ◎jpn_m.nam     日本の男性姓名
  342.     ◎jpn_f.nam     日本の女性姓名
  343.         この二つは創作などで人名が欲しくなったときに便利かもしれません。
  344.    ◎sentence.nam  ナンセンス文
  345.        実用性はまったくありません(^_^;)。
  346.     ◎weapon.nam    超兵器名(笑)
  347.         いかにも凄そうな兵器の名前を生成します。どうみても情けないのも出
  348.         てきますが、気にしないでください(^_^;)。
  349.         これも実用性はほとんどありません。
  350.     ○jpn_1stm.nam  日本の名前(男性)
  351.     ○jpn_1stf.nam 日本の名前(女性)
  352.     ○jpn_1stb.nam 日本の名前(男女両用)
  353.     ○jpn_last.nam 日本の名字
  354.     ○myth.nam      世界各地の神話中の固有名詞(カタカナ)
  355.     ○nation.nam    国名
  356.     ○hperson.nam   歴史上の人物名(世界)
  357.     ○jhperson.nam 歴史上の人物名(日本)
  358.         以上のファイルは上記の◎印のファイルに挿入されるデータです。単体
  359.         でnamegen の引数にすることはできません。
  360.  
  361.   これらのファイルは適当に打ち込んだものなので、抜けているデータはたくさ
  362. んあります。「○○が抜けてる」とかいう人は自分で追加するか、バージョンア
  363. ップを(気長に(^_^;))お待ちください。
  364.  
  365.  
  366.  
  367. §9  最後に
  368.  
  369.   本プログラムの使用条件は以下の通りです。
  370.   ・個人利用は使用・改造など一切制限しません。
  371.   ・非営利目的の配付も制限しませんが、ネットへの転載は作者まで連絡してく
  372.    ださい。
  373.  ・強制はしませんが、面白いデータが出来たら(著作権に触れないものなら)
  374.   公開して頂けると嬉しいです(^_^;)。
  375.  
  376.   本プログラムはもともと冗談ツールとして思いついたものだったのですが、作
  377. っているうちに妙に汎用的になってしまいました。用意するデータによっては、
  378. 創作やゲームの固有名詞自動生成など、実用(?)にもなると思います。
  379.   こうなると欲が出てきて、現在
  380.    ・同一ワードの複数フィールド出現を抑制する機能
  381.    ・複数フィールドのグループ化による、フィールドの階層構造化
  382. などの追加を考えています。うまくいけば次のフリコレで、バージョンアップ版
  383. を提供できると思います。
  384.  
  385.   それでは、本プログラムが皆様のお役に……は立たないかもしれませんが、気
  386. に入って頂けることを祈っています。御意見,御感想、御要望、バグ報告などが
  387. ありましたら、作者までお知らせ下さい。
  388.  
  389.  
  390.                                         STUDIO MU
  391.                                                 風の谷のガンダルフ
  392.                                                 NIFTY-ID:HFD03511
  393.  
  394.  
  395.